An H.264 Advanced Video Coder (i.e., H.264) standard introduced a high compression efficiency coding technique. With multi-core systems and multi-core processors becoming more popular, parallelism is a well-suited solution to overcome high computational complexity associated with the H.264 standard. The H.264 standard provides spatial splitting of video frames into independent blocks, called slices, that are suitable for parallel processing.
Observations show that slice-level parallel encoding often does not achieve an expected performance. Due to variable computational complexity of the video material, static slice sizes are processed in uneven time intervals. Therefore, processor workload is not evenly distributed and computational power is not used efficiently for cores which finished the slice processing sooner than other cores.
Referring to FIG. 1, a graph 20 of example conventional slice encoding time using static slice sizes is shown. The graph 20 illustrates four similar-sized slices from a 1280×710 sequence of 100 frames using quantization parameters of 32 for intra-predicted frames and 30 for inter-predicted frames. As illustrated, Slice0 and Slice1 (bottom two curves) are consistently encoded in less time than Slice2 and Slice3 (top two curves).
It would be desirable to implement dynamic slice resizing while encoding video.